# 编译器
CC = gcc

# 编译选项
CFLAGS = -Wall -Wextra -I./libs/ulog

# 源文件目录
SRC_DIR = ./src
LIB_DIR = ./libs/ulog

# 目标文件目录
OBJ_DIR = ./build/obj
BIN_DIR = ./bin

# 可执行文件名
TARGET = $(BIN_DIR)/log_demo

# 源文件
SRCS = $(SRC_DIR)/main.c $(LIB_DIR)/ulog.c

# 目标文件（将 .c 替换为 .o，并加上 OBJ_DIR 路径）
OBJS = $(patsubst %.c, $(OBJ_DIR)/%.o, $(notdir $(SRCS)))

# 默认目标
all: help

# 编译目标（声明为伪目标）
.PHONY: build
build: $(TARGET)

# 生成可执行文件
$(TARGET): $(OBJS)
	@mkdir -p $(BIN_DIR)
	$(CC) $(CFLAGS) -o $@ $^

# 编译 .c 文件为 .o 文件，并放到 OBJ_DIR 目录下
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
	@mkdir -p $(OBJ_DIR)
	$(CC) $(CFLAGS) -c -o $@ $<

$(OBJ_DIR)/%.o: $(LIB_DIR)/%.c
	@mkdir -p $(OBJ_DIR)
	$(CC) $(CFLAGS) -c -o $@ $<

# 运行程序
run: build
	@$(TARGET)

# 清理生成的文件
clean:
	rm -rf $(OBJ_DIR) $(BIN_DIR)

# 打印帮助信息
help:
	@echo "Usage: make [target]"
	@echo ""
	@echo "Targets:"
	@echo "  build    : 编译项目，生成可执行文件到 ./bin"
	@echo "  run      : 运行生成的可执行文件"
	@echo "  clean    : 清理生成的文件（包括 ./build 和 ./bin 目录）"
	@echo "  help     : 显示帮助信息"

# 伪目标
.PHONY: all build run clean help